diff --git a/user_guide/doc_style/index.html b/user_guide/doc_style/index.html
index 1c0ca51..42ebdd1 100644
--- a/user_guide/doc_style/index.html
+++ b/user_guide/doc_style/index.html
@@ -71,8 +71,14 @@
 <!-- END CONTENT -->
 
 
+
 <div id="footer">
-<p><a href="#top">Top of Page</a></p>
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="../general/styleguide.html">PHP Style Guide</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+</p>
 <p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
 </div>
 
diff --git a/user_guide/general/security.html b/user_guide/general/security.html
index 301e24f..036eb10 100644
--- a/user_guide/general/security.html
+++ b/user_guide/general/security.html
@@ -144,7 +144,7 @@
 &nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
 <a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
 <a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
-Next Topic:&nbsp;&nbsp;<a href="../libraries/benchmark.html">Benchmarking Class</a>
+Next Topic:&nbsp;&nbsp;<a href="styleguide.html">PHP Style Guide</a>
 </p>
 <p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
 </div>
diff --git a/user_guide/general/styleguide.html b/user_guide/general/styleguide.html
new file mode 100644
index 0000000..9d49a9d
--- /dev/null
+++ b/user_guide/general/styleguide.html
@@ -0,0 +1,684 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>Security : CodeIgniter User Guide</title>
+
+<style type='text/css' media='all'>@import url('../userguide.css');</style>
+<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />
+
+<style type="text/css" media="screen">
+	code {
+		white-space: pre;
+	}
+</style>
+
+<script type="text/javascript" src="../nav/nav.js"></script>
+<script type="text/javascript" src="../nav/prototype.lite.js"></script>
+<script type="text/javascript" src="../nav/moo.fx.js"></script>
+<script type="text/javascript" src="../nav/user_guide_menu.js"></script>
+
+<meta http-equiv='expires' content='-1' />
+<meta http-equiv= 'pragma' content='no-cache' />
+<meta name='robots' content='all' />
+<meta name='author' content='ExpressionEngine Dev Team' />
+<meta name='description' content='CodeIgniter User Guide' />
+
+</head>
+<body>
+
+<!-- START NAVIGATION -->
+<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
+<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
+<div id="masthead">
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td><h1>CodeIgniter User Guide Version 1.7</h1></td>
+<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
+</tr>
+</table>
+</div>
+<!-- END NAVIGATION -->
+
+
+<!-- START BREADCRUMB -->
+<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
+<tr>
+<td id="breadcrumb">
+<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
+<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
+Security
+</td>
+<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
+</tr>
+</table>
+<!-- END BREADCRUMB -->
+
+<br clear="all" />
+
+
+<!-- START CONTENT -->
+<div id="content">
+
+
+<h1>General Style and Syntax</h1>
+
+<p>The following page describes the coding rules use adhere to when developing CodeIgniter.</p>
+
+
+<h2>Table of Contents</h2>
+<ul class="minitoc">
+	<li><a href="#php_closing_tag">PHP Closing Tag</a></li>
+	<li><a href="#class_and_method_naming">Class and Method Naming</a></li>
+	<li><a href="#variable_names">Variable Names</a></li>
+	<li><a href="#commenting">Commenting</a></li>
+	<li><a href="#constants">Constants</a></li>
+	<li><a href="#true_false_and_null">TRUE, FALSE, and NULL</a></li>
+	<li><a href="#logical_operators">Logical Operators</a></li>
+	<li><a href="#comparing_return_values_and_typecasting">Comparing Return Values and Typecasting</a></li>
+	<li><a href="#debugging_code">Debugging Code</a></li>
+	<li><a href="#whitespace_in_files">Whitespace in Files</a></li>
+	<li><a href="#compatibility">Compatibility</a></li>
+	<li><a href="#use_of_sess_cache">Use of $SESS->cache</a></li>
+	<li><a href="#class_and_file_names_using_common_words">Class and File Names using Common Words</a></li>
+	<li><a href="#database_table_names">Database Table Names</a></li>
+	<li><a href="#one_file_per_class">One File per Class</a></li>
+	<li><a href="#whitespace">Whitespace</a></li>
+	<li><a href="#line_breaks">Line Breaks</a></li>
+	<li><a href="#code_indenting">Code Indenting</a></li>
+	<li><a href="#bracket_spacing">Bracket and Parenthetic Spacing</li>
+	<li><a href="#localized_text_in_control_panel">Localized Text in Control Panel</a></li>
+	<li><a href="#private_methods_and_variables">Private Methods and Variables</a></li>
+	<li><a href="#php_errors">PHP Errors</a></li>
+	<li><a href="#short_open_tags">Short Open Tags</a></li>
+	<li><a href="#one_statement_per_line">One Statement Per Line</a></li>
+	<li><a href="#strings">Strings</a></li>
+	<li><a href="#sql_queries">SQL Queries</a></li>
+	<li><a href="#default_function_arguments">Default Function Arguments</a></li>
+	<li><a href="#overlapping_tag_parameters">Overlapping Tag Parameters</a></li>
+</ul>
+
+		<h2><a name="php_closing_tag"></a>PHP Closing Tag</h2>
+		<div class="guidelineDetails">
+			<p>The PHP closing tag on a PHP document <strong>?&gt;</strong> is optional to the PHP parser.  However, if used, any whitespace following the closing tag, whether introduced 
+				by the developer, user, or an FTP application, can cause unwanted output, PHP errors, or if the latter are suppressed, blank pages.  For this reason, all PHP files should
+				<strong>OMIT</strong> the closing PHP tag, and instead use a comment block to mark the end of file and it's location relative to the application root.
+				This allows you to still identify a file as being complete and not truncated.</p>
+<code><strong>INCORRECT</strong>:
+&lt;?php
+
+echo "Here's my code!";
+
+?&gt;
+
+<strong>CORRECT</strong>:
+&lt;?php
+
+echo "Here's my code!";
+
+/* End of file myfile.php */
+/* Location: ./system/modules/mymodule/myfile.php */
+</code>
+		</div>
+
+	
+		<h2><a name="class_and_method_naming"></a>Class and Method Naming</h2>
+		<div class="guidelineDetails">
+			<p>Class names should always have their first letter uppercase, and the constructor method should match identically.  Multiple words should be separated with an underscore, and not CamelCased.  All other class methods should be entirely lowercased and named to clearly indicate their function, preferably including a verb.  Try to avoid overly long and verbose names.</p>
+
+	<code><strong>INCORRECT</strong>:
+class superclass
+class SuperClass
+
+<strong>CORRECT</strong>:
+class Super_class</code>
+
+			<p>Notice that the Class and constructor methods are identically named and cased:</p>
+
+	<code>class Super_class {
+
+	function Super_class()
+	{
+
+	}
+}</code>
+
+			<p>Examples of improper and proper method naming:</p>
+
+	<code><strong>INCORRECT</strong>:
+function fileproperties()		// not descriptive and needs underscore separator
+function fileProperties()		// not descriptive and uses CamelCase
+function getfileproperties()		// Better!  But still missing underscore separator
+function getFileProperties()		// uses CamelCase
+function get_the_file_properties_from_the_file()	// wordy
+
+<strong>CORRECT</strong>:
+function get_file_properties()	// descriptive, underscore separator, and all lowercase letters</code>
+
+		</div>
+	
+	
+		<h2><a name="variable_names"></a>Variable Names</h2>
+		<div class="guidelineDetails">
+			<p>The guidelines for variable naming is very similar to that used for class methods.  Namely, variables should contain only lowercase letters, use underscore separators, and be reasonably named to indicate their purpose and contents. Very short, non-word variables should only be used as iterators in for() loops.</p>
+<code><strong>INCORRECT</strong>:
+$j = &apos;foo&apos;;		// single letter variables should only be used in for() loops
+$Str			// contains uppercase letters
+$bufferedText		// uses CamelCasing, and could be shortened without losing semantic meaning
+$groupid		// multiple words, needs underscore separator
+$name_of_last_city_used	// too long
+
+<strong>CORRECT</strong>:
+for ($j = 0; $j &lt; 10; $j++)
+$str
+$buffer
+$group_id
+$last_city
+</code>
+		</div>
+	
+	
+		<h2><a name="commenting"></a>Commenting</h2>
+		<div class="guidelineDetails">
+			<p>In general, code should be commented prolifically.  It not only helps describe the flow and intent of the code for less experienced programmers, but can prove invaluable when returning to your own code months down the line.  There is not a required format for comments, but the following are recommended.</p>
+
+			<p><a href="http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.docblock">DocBlock</a> style comments preceding class and method declarations so they can be picked up by IDEs:</p>
+
+<code>/**
+ * Super Class
+ *
+ * @package	Package Name
+ * @subpackage	Subpackage
+ * @category	Category
+ * @author	Author Name
+ * @link	http://example.com
+ */
+class Super_class {</code>
+
+<code>/**
+ * Encodes string for use in XML
+ *
+ * @access	public
+ * @param	string
+ * @return	string
+ */
+function xml_encode($str)</code>
+
+			<p>Use single line comments within code, leaving a blank line between large comment blocks and code.</p>
+
+<code>// break up the string by newlines
+$parts = explode("\n", $str);
+
+// A longer comment that needs to give greater detail on what is
+// occurring and why can use multiple single-line comments.  Try to
+// keep the width reasonable, around 70 characters is the easiest to
+// read.  Don't hesitate to link to permanent external resources
+// that may provide greater detail:
+//
+// http://example.com/information_about_something/in_particular/
+
+$parts = $this->foo($parts);
+</code>
+		</div>
+	
+	
+		<h2><a name="constants"></a>Constants</h2>
+		<div class="guidelineDetails">
+			<p>Constants follow the same guidelines as do variables, except constants should always be fully uppercase.  <em>Always use ExpressionEngine constants when appropriate, i.e. SLASH, LD, RD, PATH_CACHE, etc.</em></p>
+<code><strong>INCORRECT</strong>:
+myConstant	// missing underscore separator and not fully uppercase
+N		// no single-letter constants
+S_C_VER		// not descriptive
+$str = str_replace('{foo}', 'bar', $str);	// should use LD and RD constants
+
+<strong>CORRECT</strong>:
+MY_CONSTANT
+NEWLINE
+SUPER_CLASS_VERSION
+$str = str_replace(LD.'foo'.RD, 'bar', $str);
+</code>
+		</div>
+	
+	
+		<h2><a name="true_false_and_null"></a>TRUE, FALSE, and NULL</h2>
+		<div class="guidelineDetails">
+			<p><strong>TRUE</strong>, <strong>FALSE</strong>, and <strong>NULL</strong> keywords should always be fully uppercase.</p>
+<code><strong>INCORRECT</strong>:
+if ($foo == true)
+$bar = false;
+function foo($bar = null)
+
+<strong>CORRECT</strong>:
+if ($foo == TRUE)
+$bar = FALSE;
+function foo($bar = NULL)</code>
+		</div>
+	
+
+	
+		<h2><a name="logical_operators"></a>Logical Operators</h2>
+		<div class="guidelineDetails">
+			<p>Use of <strong>||</strong> is discouraged as its clarity on some output devices is low (looking like the number 11 for instance).
+				<strong>&amp;&amp;</strong> is preferred over <strong>AND</strong> but either are acceptable, and a space should always precede and follow <strong>!</strong>.</p>
+<code><strong>INCORRECT</strong>:
+if ($foo || $bar)
+if ($foo AND $bar)  // okay but not recommended for common syntax highlighting applications
+if (!$foo)
+if (! is_array($foo))
+
+<strong>CORRECT</strong>:
+if ($foo OR $bar)
+if ($foo && $bar) // recommended
+if ( ! $foo)
+if ( ! is_array($foo))
+</code>
+		</div>
+	
+	
+	
+		<h2><a name="comparing_return_values_and_typecasting"></a>Comparing Return Values and Typecasting</h2>
+		<div class="guidelineDetails">
+			<p>Some PHP functions return FALSE on failure, but may also have a valid return value of "" or 0, which would evaluate to FALSE in loose comparisons.  Be explicit by comparing the variable type when using these return values in conditionals to ensure the return value is indeed what you expect, and not a value that has an equivalent loose-type evaluation.</p>
+			<p>Use the same stringency in returning and checking your own variables.  Use <strong>===</strong> and <strong>!==</strong> as necessary.
+
+<code><strong>INCORRECT</strong>:
+// If 'foo' is at the beginning of the string, strpos will return a 0,
+// resulting in this conditional evaluating as TRUE
+if (strpos($str, 'foo') == FALSE)
+
+<strong>CORRECT</strong>:
+if (strpos($str, 'foo') === FALSE)
+</code>
+
+<code><strong>INCORRECT</strong>:
+function build_string($str = "")
+{
+	if ($str == "")	// uh-oh!  What if FALSE or the integer 0 is passed as an argument?
+	{
+
+	}
+}
+
+<strong>CORRECT</strong>:
+function build_string($str = "")
+{
+	if ($str === "")
+	{
+
+	}
+}</code>
+
+		<p>See also information regarding <a href="http://us3.php.net/manual/en/language.types.type-juggling.php#language.types.typecasting">typecasting</a>, which can be quite useful.  Typecasting has a slightly different effect which may be desirable.  When casting a variable as a string, for instance, NULL and boolean FALSE variables become empty strings, 0 (and other numbers) become strings of digits, and boolean TRUE becomes "1":</p>
+
+<code>$str = (string) $str;	// cast $str as a string</code>
+
+		</div>
+	
+	
+		<h2><a name="debugging_code"></a>Debugging Code</h2>
+		<div class="guidelineDetails">
+			<p>No debugging code can be left in place for submitted add-ons unless it is commented out, i.e. no var_dump(), print_r(), die(), and exit() calls that were used while creating the add-on, unless they are commented out.</p>
+
+<code>// print_r($foo);</code>
+		</div>
+	
+
+	
+		<h2><a name="whitespace_in_files"></a>Whitespace in Files</h2>
+		<div class="guidelineDetails">
+			<p>No whitespace can precede the opening PHP tag or follow the closing PHP tag.  ExpressionEngine output is buffered, so whitespace in your files can cause output to begin before ExpressionEngine outputs its content, leading to errors and an inability for ExpressionEngine to send proper headers.  In the examples below, select the text with your mouse to reveal the incorrect whitespace.</p>
+
+			<p><strong>INCORRECT</strong>:</p>
+<code>     
+&lt;?php
+	// ...there is whitespace and a linebreak above the opening PHP tag
+	// as well as whitespace after the closing PHP tag
+?&gt;    
+</code>
+			<p><strong>CORRECT</strong>:</p>
+<code>&lt;?php
+	// this sample has no whitespace before or after the opening and closing PHP tags
+?&gt;</code>
+
+		</div>
+	
+	
+		<h2><a name="compatibility"></a>Compatibility</h2>
+		<div class="guidelineDetails">
+			<p>Unless specifically mentioned in your add-on's documentation, all code must be compatible with PHP version 4.3+.  Additionally, do not use PHP functions that require non-default libraries to be installed unless your code contains an alternative method when the function is not available, or you implicitly document that your add-on requires said PHP libraries.</p>
+		</div>
+	
+	
+		<h2><a name="use_of_sess_cache"></a>Use of $SESS->cache</h2>
+		<div class="guidelineDetails">
+			<p>$SESS->cache is an array provided for you to use for "flash" content, i.e. values that you would like to persist during a page load, helping you eliminate redundant queries and PHP processing.  To avoid conflicts with other first and third-party use of this array, always access it as a multi-dimensional array, using your class name as the primary array name, and your variables within.  Naming conventions should follow that of other variables: lowercase letters, underscores for separators between words, and meaningful names.</p>
+
+<code><strong>INCORRECT</strong>:
+$SESS->cache['admins']
+$SESS->cache['Super_class']['admins']
+
+<strong>CORRECT</strong>:
+$SESS->cache['super_class']['admins']</code>
+
+			<p>Here is an example of how one might utilize the $SESS->cache array.  This way, no matter how many times this method is called on a given page load (for instance, a tag being used twice on a template, or within a tag that might loop, such as a plugin within the Weblog entries tag), the query and loading of the array occurs only once.</p>
+
+<code>if ( ! isset($SESS->cache['super_class']['admins']))
+{
+	$query = $DB->query("SELECT member_id FROM exp_super_class_admins");
+
+	if ($query->num_rows > 0)
+	{
+		foreach ($query->result as $row)
+		{
+			$SESS->cache['super_class']['admins'][] = $row['member_id'];
+		}
+	}	
+}
+
+// set a local variable from the cached global so it's easy to use in the code
+$admins = $SESS->cache['super_class']['admins'];
+</code>
+		<p>You can see an example of real-world usage of $SESS->cache in the Weblog module's <samp>fetch_custom_weblog_fields()</samp> and <samp>next_prev_entry()</samp> methods, and the IP to Nation module's <samp>get_country()</samp> method.</p>
+		
+		</div>
+	
+
+	
+		<h2><a name="class_and_file_names_using_common_words"></a>Class and File Names using Common Words</h2>
+		<div class="guidelineDetails">
+			<p>When your class or filename is a common word, or might quite likely be identically named in another PHP script, provide a unique prefix to help prevent collision.  Always realize that your end users may be running other add-ons or third party PHP scripts.  Choose a prefix that is unique to your identity as a developer or company.</p>
+
+<code><strong>INCORRECT</strong>:
+class Email		pi.email.php
+class Xml		ext.xml.php
+class Import		mod.import.php
+
+<strong>CORRECT</strong>:
+class Pre_email		pi.pre_email.php
+class Pre_xml		ext.pre_xml.php
+class Pre_import	mod.pre_import.php
+</code>
+		</div>
+	
+	
+		<h2><a name="database_table_names"></a>Database Table Names</h2>
+		<div class="guidelineDetails">
+			<p>Any tables that your add-on might use must use the 'exp_' prefix, followed by a prefix uniquely identifying you as the developer or company, and then a short descriptive table name.  You do not need to be concerned about the database prefix being used on the user's installation, as ExpressionEngine's database class will automatically convert 'exp_' to what is actually being used.</p>
+
+<code><strong>INCORRECT</strong>:
+email_addresses		// missing both prefixes
+pre_email_addresses	// missing exp_ prefix
+exp_email_addresses	// missing unique prefix
+
+<strong>CORRECT</strong>:
+exp_pre_email_addresses
+</code>
+
+			<p class="important"><strong>NOTE:</strong> Be mindful that MySQL has a limit of 64 characters for table names.  This should not be an issue as table names that would exceed this would likely have unreasonable names.  For instance, the following table name exceeds this limitation by one character.  Silly, no? <strong>exp_pre_email_addresses_of_registered_users_in_seattle_washington</strong>
+		</div>
+	
+
+	
+		<h2><a name="one_file_per_class"></a>One File per Class</h2>
+		<div class="guidelineDetails">
+			<p>Use separate files for each class your add-on uses, unless the classes are <em>closely related</em>.  An example of ExpressionEngine files that contains multiple classes is the Database class file, which contains both the DB class and the DB_Cache class, and the Magpie plugin, which contains both the Magpie and Snoopy classes.</p>
+		</div>
+	
+
+	
+		<h2><a name="whitespace"></a>Whitespace</h2>
+		<div class="guidelineDetails">
+			<p>Use tabs for whitespace in your code, not spaces.  This may seem like a small thing, but using tabs instead of whitespace allows the developer looking at your code to have indentation at levels that they prefer and customize in whatever application they use.  And as a side benefit, it results in (slightly) more compact files, storing one tab character versus, say, four space characters.</p>
+		</div>
+	
+
+	
+		<h2><a name="line_breaks"></a>Line Breaks</h2>
+		<div class="guidelineDetails">
+			<p>Files must be saved with Unix line breaks.  This is more of an issue for developers who work in Windows, but in any case ensure that your text editor is setup to save files with Unix line breaks.</p>
+		</div>
+	
+
+	
+		<h2><a name="code_indenting"></a>Code Indenting</h2>
+		<div class="guidelineDetails">
+			<p>Use Allman style indenting.  With the exception of Class declarations, braces are always placed on a line by themselves, and indented at the same level as the control statement that "owns" them.</p>
+
+<code><strong>INCORRECT</strong>:
+function foo($bar) {
+	// ...
+}
+
+foreach ($arr as $key => $val) {
+	// ...
+}
+
+if ($foo == $bar) {
+	// ...
+} else {
+	// ...
+}
+
+for ($i = 0; $i &lt; 10; $i++)
+	{
+	for ($j = 0; $j &lt; 10; $j++)
+		{
+		// ...
+		}
+	}
+
+<strong>CORRECT</strong>:
+function foo($bar)
+{
+	// ...
+}
+
+foreach ($arr as $key => $val)
+{
+	// ...
+}
+
+if ($foo == $bar)
+{
+	// ...
+}
+else
+{
+	// ...
+}
+
+for ($i = 0; $i &lt; 10; $i++)
+{
+	for ($j = 0; $j &lt; 10; $j++)
+	{
+		// ...
+	}
+}</code>
+		</div>
+	
+
+	<h2><a name="bracket_spacing"></a>Bracket and Parenthetic Spacing</h2>
+		<div class="guidelineDetails">
+			<p>In general, parenthesis and brackets should not use any additional spaces.  The exception is that a space should always follow PHP control structures that accept arguments with parenthesis (declare, do-while, elseif, for, foreach, if, switch, while), to help distinguish them from functions and increase readability.</p>
+			
+<code>INCORRECT:
+$arr[ $foo ] = 'foo';
+
+CORRECT:
+$arr[$foo] = 'foo';		// no spaces around array keys
+
+
+INCORRECT:
+function foo ( $bar )
+{
+	
+}
+
+CORRECT:
+function foo($bar)		// no spaces around parenthesis in function declarations
+{
+	
+}
+
+
+INCORRECT:
+foreach( $query->result as $row )
+
+CORRECT:
+foreach ($query->result as $row)	// single space following PHP control structures, but not in interior parenthesis
+</code>
+		</div>
+	
+	
+	
+		<h2><a name="localized_text_in_control_panel"></a>Localized Text in Control Panel</h2>
+		<div class="guidelineDetails">
+			<p>Any text that is output in the control panel should use language variables in your module's lang file to allow localization.</p>
+
+<code>INCORRECT:
+return "Invalid Selection";
+
+CORRECT:
+return $LANG->line('invalid_selection');</code>
+		</div>
+	
+
+	
+		<h2><a name="private_methods_and_variables"></a>Private Methods and Variables</h2>
+		<div class="guidelineDetails">
+			<p>Methods and variables that are only accessed internally by your class, such as utility and helper functions that your public methods use for code abstraction, should be prefixed with an underscore.</p>
+
+<code>convert_text()		// public method
+_convert_text()		// private method</code>
+		</div>
+	
+
+	
+		<h2><a name="php_errors"></a>PHP Errors</h2>
+		<div class="guidelineDetails">
+			<p>Code must run error free and not rely on warnings and notices to be hidden to meet this requirement.  For instance, never access a variable that you did not set yourself (such as $_POST array keys) without first checking to see that it isset().</p>
+
+			<p>Make sure that while developing your add-on, error reporting is enabled for ALL users, and that display_errors is enabled in the PHP environment.  You can check this setting with:</p>
+
+<code>if (ini_get('display_errors') == 1)
+{
+	exit "Enabled";
+}</code>
+
+			<p>On some servers where display_errors is disabled, and you do not have the ability to change this in the php.ini, you can often enable it with:</p>
+
+<code>ini_set('display_errors', 1);</code>
+
+			<p class="important"><strong>NOTE:</strong> Setting the <a href="http://us.php.net/manual/en/ref.errorfunc.php#ini.display-errors">display_errors</a> setting with ini_set() at runtime is not identical to having it enabled in the PHP environment.  Namely, it will not have any effect if the script has fatal errors</p>
+		</div>
+	
+
+	
+		<h2><a name="short_open_tags"></a>Short Open Tags</h2>
+		<div class="guidelineDetails">
+			<p>Always use full PHP opening tags, in case a server does not have short_open_tag enabled.</p>
+
+<code><strong>INCORRECT</strong>:
+&lt;? echo $foo; ?&gt;
+
+&lt;?=$foo?&gt;
+
+<strong>CORRECT</strong>:
+&lt;?php echo $foo; ?&gt;</code>
+		</div>
+	
+
+	
+		<h2><a name="one_statement_per_line"></a>One Statement Per Line</h2>
+		<div class="guidelineDetails">
+			<p>Never combine statements on one line.</p>
+
+<code><strong>INCORRECT</strong>:
+$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
+
+<strong>CORRECT</strong>:
+$foo = 'this';
+$bar = 'that';
+$bat = str_replace($foo, $bar, $bag);
+</code>
+		</div>
+	
+
+	
+		<h2><a name="strings"></a>Strings</h2>
+		<div class="guidelineDetails">
+			<p>Always use single quoted strings unless you need variables parsed, and in cases where you do need variables parsed, use braces to prevent greedy token parsing.  You may also use double-quoted strings if the string contains single quotes, so you do not have to use escape characters.</p>
+
+<code><strong>INCORRECT</strong>:
+"My String"					// no variable parsing, so no use for double quotes
+"My string $foo"				// needs braces
+'SELECT foo FROM bar WHERE baz = \'bag\''	// ugly
+
+<strong>CORRECT</strong>:
+'My String'
+"My string {$foo}"
+"SELECT foo FROM bar WHERE baz = 'bag'"</code>
+		</div>
+	
+
+	
+		<h2><a name="sql_queries"></a>SQL Queries</h2>
+		<div class="guidelineDetails">
+			<p>MySQL keywords are always capitalized: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN, etc.</p>
+
+			<p>Break up long queries into multiple lines for legibility, preferably breaking for each clause.</p>
+
+<code><strong>INCORRECT</strong>:
+// keywords are lowercase and query is too long for
+// a single line (... indicates continuation of line)
+$query = $DB->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
+...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
+
+<strong>CORRECT</strong>:
+$query = $DB->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
+			FROM exp_pre_email_addresses
+			WHERE foo != 'oof'
+			AND baz != 'zab'
+			ORDER BY foobaz
+			LIMIT 5, 100");</code>
+		</div>
+	
+
+	
+		<h2><a name="default_function_arguments"></a>Default Function Arguments</h2>
+		<div class="guidelineDetails">
+			<p>Whenever appropriate, provide function argument defaults, which helps prevent PHP errors with mistaken calls and provides common fallback values which can save a few lines of code. Example:</p>
+
+<code>function foo($bar = '', $baz = FALSE)</code>
+		</div>
+	
+
+	
+		<h2><a name="overlapping_tag_parameters"></a>Overlapping Tag Parameters</h2>
+		<div class="guidelineDetails">
+			<p>Avoid multiple tag parameters that have effect on the same thing.  For instance, instead of <strong>include=</strong> and <strong>exclude=</strong>, perhaps allow <strong>include=</strong> to handle the parameter alone, with the addition of "not", e.g. <strong>include="not bar"</strong>.  This will prevent problems of parameters overlapping or having to worry about which parameter has priority over another.</p>
+		</div>
+	
+
+</div>
+
+
+
+</div>
+<!-- END CONTENT -->
+
+
+<div id="footer">
+<p>
+Previous Topic:&nbsp;&nbsp;<a href="security.html">Security</a>
+&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
+Next Topic:&nbsp;&nbsp;<a href="../doc_style/index.html">Writing Documentation</a>
+</p>
+<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006-2008 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/user_guide/nav/nav.js b/user_guide/nav/nav.js
index 06f9916..ffcb4d1 100644
--- a/user_guide/nav/nav.js
+++ b/user_guide/nav/nav.js
@@ -35,6 +35,7 @@
 			'<li><a href="'+base+'overview/mvc.html">Model-View-Controller</a></li>' +
 			'<li><a href="'+base+'overview/goals.html">Architectural Goals</a></li>' +
 		'</ul>' +	
+
 				
 		'</td><td class="td_sep" valign="top">' +
 
@@ -62,6 +63,8 @@
 			'<li><a href="'+base+'general/managing_apps.html">Managing Applications</a></li>' +
 			'<li><a href="'+base+'general/alternative_php.html">Alternative PHP Syntax</a></li>' +
 			'<li><a href="'+base+'general/security.html">Security</a></li>' +
+			'<li><a href="'+base+'general/styleguide.html">PHP Style Guide</a></li>' +
+			'<li><a href="'+base+'doc_style/index.html">Writing Documentation</a></li>' +
 		'</ul>' +
 		
 		'</td><td class="td_sep" valign="top">' +
@@ -128,7 +131,6 @@
 		'<li><a href="'+base+'general/quick_reference.html">Quick Reference Chart</a></li>' +
 		'<li><a href="http://codeigniter.com/forums/">Community Forums</a></li>' +
 		'<li><a href="http://codeigniter.com/wiki/">Community Wiki</a></li>' +
-		'<li><a href="'+base+'doc_style/index.html">Writing Documentation</a></li>' +
 		'</ul>' +	
 		
 		'</td></tr></table>');
diff --git a/user_guide/toc.html b/user_guide/toc.html
index 45a5df4..9714ad8 100644
--- a/user_guide/toc.html
+++ b/user_guide/toc.html
@@ -115,6 +115,8 @@
 	<li><a href="./general/managing_apps.html">Managing Applications</a></li>
 	<li><a href="./general/alternative_php.html">Alternative PHP Syntax</a></li>
 	<li><a href="./general/security.html">Security</a></li>
+	<li><a href="./general/styleguide.html">PHP Style Guide</a></li>	
+	<li><a href="./doc_style/index.html">Writing Documentation</a></li>
 </ul>
 
 </td>
@@ -184,7 +186,6 @@
 <li><a href="./general/quick_reference.html">Quick Reference Chart</a></li>
 <li><a href="http://codeigniter.com/forums/">Community Forums</a></li>
 <li><a href="http://codeigniter.com/wiki/">Community Wiki</a></li>
-<li><a href="./doc_style/index.html">Writing Documentation</a></li>
 </ul>
 
 
